package com.seckill.Cache;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 缓存热点数据
 */
@Component
public class HotKeyLocalCache {

    @Autowired
    private HotCache hotCache;

    /**
     * google Cache 是一个线程安全的缓存实现，支持多种特性，例如：
     * 自动加载：可以配置为自动加载缓存值。
     * 自动过期：支持基于时间的过期策略（如 TTL）。
     * 大小限制：可以限制缓存的最大大小。
     * 监听器：可以注册监听器来处理缓存项的移除事件。
     * 常用的 Cache 类型
     * Guava 提供了多种缓存实现，其中最常用的是 LoadingCache 和 CacheBuilder。
     * 1. LoadingCache
     * LoadingCache 是一个自动加载的缓存实现，当缓存中没有某个键对应的值时，它会自动加载该值。LoadingCache 通常通过 CacheLoader 来加载数据。
     * 2. CacheBuilder
     * CacheBuilder 是一个构建器，用于创建自定义的 Cache 实例。通过 CacheBuilder，可以灵活配置缓存的各种特性，如过期策略、大小限制等。
     */
    // 本地缓存
    public Cache<Long,String> localCache = CacheBuilder.newBuilder()
            // 设置最大缓存条目数 500条
            .maximumSize(500)
            // 设置缓存项的过期时间 60s
            .expireAfterAccess(60, TimeUnit.SECONDS)
            .build();

    /**
     * 获取本地缓存，不存在则为空
     * @param key
     * @return
     */
    public String getGoodsInfoByLocalCache(Long key){
        return localCache.getIfPresent(key);
    }
}
